#pragma once

#include "exports.hpp"




class ENGINE_INPUT_API Key
{
public:

	/* This Enumeration identifies every physical key
	on either the keyboard or the mouse. It can be used
	from clients of the IInputDevice interface, but this
	won't happen often
	*/
	enum Type
	{
		_0,
		_1,
		_2,
		_3,
		_4,
		_5,
		_6,
		_7,
		_8,
		_9,

		A,
		B,
		C,
		D,
		E,
		F,
		G,
		H,
		I,
		J,
		K,
		L,
		M,
		N,
		O,
		P,
		Q,
		R,
		S,
		T,
		U,
		V,
		W,
		X,
		Y,
		Z,

		F1,
		F2,
		F3,
		F4,
		F5,
		F6,
		F7,
		F8,
		F9,
		F10,
		F11,
		F12,

		Space,
		LControl,
		RControl,
		LShift,
		RShift,
		Alt,
		AltGr,
		Caps,
		Tab,
		Enter,
		Backspace,
		Delete,
		Esc,
		Pause,
		Print,
		Pos1,
		End,
		PageDown,
		PageUp,
		Left,
		Up,
		Right,
		Down,

		MouseLeft,
		MouseMiddle,
		MouseRight,
		MouseX1,
		MouseX2,

		Unknown,
	};
	///////////////////////////////////////////////////////////////////////////////////////////////


	/**
	 * Test if this key is being pressed.
	 * This only return true the first frame the key has been pressed down.
	 */
	virtual bool pressed() const = 0;

	/**
	 * Test if this key is being clicked.
	 * This only returns true the first frame the click occured.
	 */
	virtual bool clicked() const = 0;

	/**
	 * Test if this key is currently down or not.
	 * As long as the key is down, this function returns
	 * true.
	 */
	virtual bool down() const = 0;
};
///////////////////////////////////////////////////////////////////////////////////////////////////
